#include <iostream>

using namespace std;


void split(int *arr, int low, int high, int mm, int& splitIndex1, int& splitIndex2)
{
	int i = low;
	int temp;
	int swapIndex = low;
	for (i = low; i <= high; i++) {
		if (arr[i] <= mm) {
			temp = arr[i];
			arr[i] = arr[swapIndex];
			arr[swapIndex] = temp;	
			++swapIndex;
		}
	}

	splitIndex2 = swapIndex - 1;

	i = low;
	swapIndex = low;
	for (; i <= splitIndex2; i++) {
		if (arr[i] < mm) {
			temp = arr[i];
			arr[i] = arr[swapIndex];
			arr[swapIndex] = temp;
			++swapIndex;
		}
	}
	splitIndex1 = swapIndex;
}

void merge(int *arr, int p, int q, int r, int s)
{
	int t = p, k = r;
	int *temp = new int[q - p + 1 + s - r + 1];
	int result = 0;
	while (t <= q && k <= s) {
		if (arr[t] <= arr[k]) {
			temp[result] = arr[t];
			++t;
		}
		else {
			temp[result] = arr[k];
			++k;
		} 
		++result;
	}
	
	if (t > p) {
		for (int j = k; j <= s; j++) {
			temp[result++] = arr[j];
		}
	}
	
	if (k > s) {
		for (int j = t; j <= q; j++) {
			temp[result++] = arr[j];
		}
	}
	
	for (int i = 0; i < result; i++) {
		arr[p + i] = temp[i];
	}
	delete[] temp;
}

void mergeSort(int *arr, int low, int high)
{
	int N = high - low + 1;
	int subLen = 1;
	while (subLen < N) {
		int p = low;
		int q = p + subLen - 1;
		int r = q + 1;
		int s = (r + subLen - 1) > high ? high : r + subLen - 1;
		while (r <= high) {
			merge(arr, p, q, r, s);
			p = s + 1;
			q = p + subLen - 1;
			r = q + 1;
			s = (r + subLen - 1) > high ? high : r + subLen - 1;
		}
		subLen *= 2;
	}
}

int select(int *arr, int low, int high, int k)
{
	int N = high - low + 1;
	if (N < 44) {
		mergeSort(arr, low, high);
		return arr[k + low];
	} else {
		int q = N / 5;
		int *M = new int[q];
		int subLow, subHigh;
		subLow = low;
		subHigh = subLow + 4;
		for (int i = 0; i < q; i++) {
			mergeSort(arr, subLow, subHigh);
			M[i] = arr[subLow + 2];
			subLow = subHigh + 1;
			subHigh = subLow + 4;
		}
		
		int mm = select(M, 0, q - 1, q / 2);

		int splitIndex1 = 0;
		int splitIndex2 = 0;
		split(arr, low, high, mm, splitIndex1, splitIndex2);
		if (splitIndex1 > (low + k))
			return select(arr, low, splitIndex1 - 1, k);
		else if (splitIndex1 <= (low + k) && (splitIndex2 >= (low + k)))
			return mm;
		else
			return select(arr, splitIndex2 + 1, high, k + low - splitIndex2 - 1);

		/*int *A1 = new int[N];
		int size1 = 0;
		int *A3 = new int[N];
		int size3 = 0;
		int equalNum = 0;
		for (int i = low; i <= high; i++) {
			if(arr[i] < mm) {
				A1[size1++] = arr[i];
			} else if (arr[i] > mm) {
				A3[size3++] = arr[i];
			} else 
				equalNum++;
		}
		int result = 0;
		if (size1 > k) {
			result = select(A1, 0, size1 - 1, k);
		} else if ((size1 - 1 + equalNum) >= k) {
			result = mm;
		} else {
			result = select(A3, 0, size3 - 1, k - (size1 + equalNum));
		}
		delete[] A1;
		delete[] A3;
		delete[] M;
		return result;*/
	}
}


int main(int argc, char * argv[])
{
	int N;
	scanf("%d", &N);
	int *arr = new int[N];
	/*for (int i = 0; i < N; i++) {
		scanf("%d", arr + i);
	}*/

	for (int i = 0; i < N; i++) {
		arr[i] = N - i;
	}

	//mergeSort(arr, 0, N - 1);
	if (N % 2 == 0) {
		int addends1 = select(arr, 0, N - 1, N / 2 - 1)/*arr[N / 2 -1]*/;
		int addends2 = select(arr, 0, N - 1, N / 2)/*arr[N / 2]*/;
		double semiSum = ((double)addends1 + (double)addends2) / 2.0;
		printf("%.1lf\n", semiSum);
	} else {
		double result = (double)select(arr, 0, N - 1, N / 2)/*arr[N / 2]*/;
		printf("%.1lf\n", result);
	}
	delete[] arr;
	return 0;

}